at & crontab(anacron)

at
at 명령은 쉘이 작업을 실행해야 할 때를 통제하는 대기열에 작업을 올린다.
리눅스 부팅때 자동으로 시작되는 atd(at 데몬)은 백그라운드에서 실행시킬 작업의 대기열을 확인한다.

일반적으로 60초마다 at 명령을 사용하여 대기열에 올린 작업에 대한 시스템의 특별한 디렉토리 (일반적으로 /var/spoll/at)를 확인한다.
at -f <filename> time
at -M -f <filename> time
atq # at queue
atrm <atqueue number> # at remove
STDIN으로 받은 입력을 작업 대기열에 올리던가, -f를 통해 파일로 스크립트를 지정할 수 있다.

time format
- 표준 시 및 분 형식 10:15
- 오전(AM)/오후(PM) 표시 10:15PM
- 특정하게 이름이 붙은 시각 now, noon(정오), midnight(자정), teatime(4PM)
date format
- 표준 날짜 형식 MMDDYY, MM/DD/YY, DD.MM.YY
- 텍스트 날짜 Jul 4, Dec 25
- 시간 증분값 Now+25minutes, 10:15PM tomorrow, 10:15+7days
과거에 사용되던 batch는 최근 스크립트로 at을 호출하는 명령어로 사용됨

at은 기본적으로 STDOUT, STDERR를 이메일(sendmail)을 통해서 전송한다.
at 명령에서 리다이렉트 할 수 없기 때문에 스크립트 내부에서 리다이렉트해서 파일에 기록하도록 생성해야 함

리다이렉트 하지 않으면서, sendmail을 억제하기 위해서 -M 옵션 사용
at 명령어를 사용해서 정해진 시간에 프로그램을 실행하도록 설정할 수 있지만,(작업을 대기열; 큐에 올림으로서)
반복적으로 실행하도록 설정하기 위해서는 crontab을 사용한다.
crontab
cron 프로그램은 백그라운드에서 실행되며, 예약된 작업을 위한 특별한 테이블인 크론 테이블을 확인한다.
# crontable format
min hour dayofmonth month dayofweek command
# ex)
15 10 * * * command # 10:15
15 16 * * 1 command # 4 15
00 12 1 * * command # 1
*/10 * * * * command # 10
0,30 * * * * command # 30
0-30 1 * * * command # 1 0 30
#
00 12 * * * if[ `date +%d -d tomorrow` = 01 ]; then; command
@reboot command #
at과 달리 command를 지정할 때 어떤 매개변수든 쓸 수 있고 원하는 리다이렉트 기호를 쓸 수 있다.
전체 명령 경로를 사용해야 함

crontab 프로그램은 작업을 대기열에 올린 사용자 계정을 사용하여 스크립트를 실행한다.
crontab -e # crontab
crontab -l # crontab
크론 디렉토리
/etc/cron.*ly

└─$ ls /etc/cron.*ly
/etc/cron.daily:
apache2  apt-compat  aptitude  debtags  dpkg  logrotate  man-db  plocate  samba  sendmail  sysstat

/etc/cron.hourly:

/etc/cron.monthly:
rwhod

/etc/cron.weekly:
man-db
cron은 미리 설정된 크론 스크립트 디렉토리를 제공한다.
hourly(매시간), daily(매일), monthly(매달), weekly(매주) 네가지 디렉토리에
스크립트(EFL)를 복사하면, 해당 주기에 맞춰 crontab이 실행한다.
crontab은 기본적으로 리눅스 시스템이 하루 24시간 주 7일 내내 운영되고 있다고 가정한다.
만일 예약된 시간에 리눅스 시스템이 꺼져 있다면 해당 작업은 실행되지 않는다.
anacron
anacron은 예약된 실행을 놓친 작업이 있는지 판단하고 될 수 있는대로 빨리 이러한 작업을 실행한다.
단, cron 디렉토리로 관리되는 프로그램만이 대상이다. (cron.hourly는 실행하지 않음)
/etc/anacrontab

/var/spool/anacron/ 에 타임스탬프 파일이 하나씩 존재한다.
period delay identifier command
1 5 cron.daily <command> # 5 command